#ifndef CONTROLADOR_RECURSO_H
#define CONTROLADOR_RECURSO_H

#include <string>
#include <set>
#include "interfaces/IControladorRecurso.h"
#include "interfaces/IControladorUsuario.h"
#include "controllers/ControladorUsuario.h"
#include "models/Recurso.h"
#include "models/Carpeta.h"
#include "models/Archivo.h"
#include "models/Accion.h"



class ControladorRecurso: public IControladorRecurso {

	private:
			set<Recurso*> recursosSistema;
			Carpeta * carpetaAColaborar;
			Recurso * rec;
			Carpeta * raiz;
			int cantidadComentarios;
			Archivo * archivoAComentar;
		   	Comentario * comentarioAAgregar;
			set<Accion*> historialAcciones;
			IControladorUsuario * CU;

	public:
		    ControladorRecurso();
		    Recurso* getRecurso();
		    Carpeta* getCarpetaAColaborar();
			Carpeta* setCarpetaAColaborar(string nombreCarpeta, string ruta);
			set<Usuario*> setCreador(Usuario user);
			void setInterfazControladorUsuario(IControladorUsuario* CU);
			void crearRecurso(string nombre, string descripcion, string tipo);
			void indicarCreador(string nickName);
			void indicarDestino(string rutaDestino);
			bool registrarUsuarioColaborador();
			bool elegirCarpetaAColaborar(string colaborador, string carpeta, string ubicacion);
			//bool elegirAutorModificacionArchivo(IControladorUsuario * iCU,string modificador);
			bool elegirArchivoAModificar(string nombreArchivo, string rutaArchivo);
			void ingresarNuevaDescripcionArchivo(string nombreArchivo, string rutaArchivo, string descripcion);
			void registrarNuevoComentario(string ruta, string nombreArchivo);
			void ingresarNuevoComentario();
			void ingresarComentarioRespuesta(int idComentario);
			void ingresarUsuarioYTexto(string nickName, string texto);
			void imprimirHistorialUsuario(string nickName);
			void imprimirArchivosSistema();
			void verificarRuta(string ruta);
			void validarCantidadCaracteres(string palabra);
			void validarContieneBarra(string s);
			set<Recurso*> obtenerRecursosPorRuta(string ruta,string tipo);
			void enUsoRecurso(string nombre);
			void verificarColaboradorCarpeta(string nombre);
			void split(vector<string> &tokens, const string &text, char sep);
			void verInformacionCarpeta();
			void elegirCarpetaSistema(string nombreCarpeta, string rutaCarpeta);
			void verInformacionArchivo();
			void elegirArchivoSistema(int id);
			void validarPermisoCarpeta(string ruta);
			Carpeta * obtenerCarpeta(string nombre,string ruta);
			void agregarRecursoHijo(string ruta);
			void existeRuta(string ruta);
			void agregarAccion(TipoAccion tipo,Usuario* user,Recurso* rec);
			set<Accion*> getHistorialAcciones();
			~ControladorRecurso(){};
};

#endif
